home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 081 / yamck100.arc / YABBS.H next >
C/C++ Source or Header  |  1988-05-11  |  18KB  |  495 lines

  1. /************************************************************************/
  2. /************************************************************************/
  3. /*                                    */
  4. /*                        RADICALLY PUBLIC DOMAIN                       */
  5. /*                                    */
  6. /* Header file definitions for Fido/Opus/PBBS.                */
  7. /*                                    */
  8. /* Author : William Beebe.                        */
  9. /* Started: 1 May 1987                            */
  10. /*                                    */
  11. /* This header definition file is a blantant copy of Fido and Opus    */
  12. /* data and structure definitions. This header file is in fact a sub-    */
  13. /* set of both (though it may in time become a superset).        */
  14. /* PBBS will try to make itself as compatible with Opus data structures    */
  15. /* as possible. This means forgoing strict compatibility with Fido.    */
  16. /*                                    */
  17. /*                        RADICALLY PUBLIC DOMAIN                       */
  18. /*                                    */
  19. /************************************************************************/
  20. /************************************************************************/
  21.  
  22. /*        System defines and common structures.                */
  23.  
  24. typedef        unsigned bit;
  25. typedef        unsigned char byte;
  26. typedef        unsigned int word;
  27. typedef        unsigned long dword;
  28.  
  29. #include    <time.h>
  30.  
  31. #define        d_year    time_list->tm_year
  32. #define        d_mon    (time_list->tm_mon + 1)
  33. #define        i_mon    time_list->tm_mon
  34. #define        d_mday    time_list->tm_mday
  35. #define        d_yday    (time_list->tm_yday + 1)
  36. #define        d_wday    time_list->tm_wday
  37. #define        d_sec    time_list->tm_sec
  38. #define        d_min    time_list->tm_min
  39. #define        d_hour    time_list->tm_hour
  40.  
  41. #define    yes    -1
  42. #define    no    0
  43. #define    dim(x) (sizeof(x)/sizeof(x[0]))    /* macro to return the number    */
  44.                     /* of elements in a structure.    */
  45.  
  46. #define    max(a,b)    (((a) > (b)) ? (a) : (b))
  47. #define    min(a,b)    (((a) < (b)) ? (a) : (b))
  48.  
  49. /*    Utility structures and defines.                    */
  50.  
  51. /*    Access levels.                            */
  52.  
  53. #define    TWIT        -2    /* Fido base definition.        */
  54. #define    DISGRACE    0    /* Fido base definition.        */
  55. #define    NORMAL        2    /* Fido base definition.        */
  56. #define    PRIVEL        4    /* Fido base definition.        */
  57. #define    EXTRA        6    /* Fido base definition.        */
  58. #define    ASSTSYSOP    8    /* Opus extension.            */
  59. #define    SYSOP        10    /* Fido base definition.        */
  60. #define    HIDDEN        11    /* Opus extension.            */
  61.  
  62. /*    Help levels.                            */
  63.  
  64. #define    EXPERT        2    /* no menus.                */
  65. #define    REGULAR        4    /* brief menus, usually just letters.    */
  66. #define    NOVICE        6    /* verbose multi-line menus.        */
  67.  
  68. /*    System flags.                            */
  69.  
  70. #define    SYSMAIL        1    /* is a mail area.            */
  71. #define    SYSOVR        2    /* overwritting files OK.        */
  72. #define    NOPUBLIC    4    /* OPUS: disallow public messages.    */
  73. #define    NOPRIVATE    8    /* OPUS: disallow private messages.    */
  74. #define    ANON_OK        16    /* OPUS: enable anonymous messages.    */
  75. #define    ECHOMAIL    32    /* OPUS: set is EchoMail, clr is not.    */
  76.  
  77. /*    Matrix mask. Undefined bits are reserved by Opus         */
  78.  
  79. #define    NO_TRAFFIC    0x0001    /* ok to send outbound local        */
  80. #define    LOCAL_ONLY    0x0002    /* ok to send outbound local        */
  81. #define    OPUS_ONLY    0x0004    /* only send to #CM systems        */
  82.  
  83. #define    NO_EXITS    0x2000    /* crash/arc exits ignored        */
  84. #define    MAIL_ONLY    0x4000    /* no human callers allowed        */
  85. #define    TAKE_REQ    0x8000    /* file requests are ok            */
  86.  
  87.  
  88. /*    Misc. flags.                            */
  89.  
  90. #define LOGECHO        0x0001  /* log echomail areas            */
  91. #define STEADY        0x0002  /* never change baud rate        */
  92. #define ECHOSCAN    0x0004  /* automatically scan echo's        */
  93. #define ECHO_GUARD    0x0008  /* no toss un-pwd echo arc        */
  94. #define NO_FWD        0x0010  /* No IN TRANSIT netmail        */
  95.  
  96. /*    Time stamp structure.                        */
  97.  
  98. struct    _stamp
  99.     {
  100.     word    date;
  101.     word    time;
  102.     };
  103.  
  104. /*    FOSSIL information structure.                    */
  105.  
  106. struct    _fossil
  107.     {
  108.     word    strsiz;        /* size of the structure in bytes.    */
  109.     byte    majver;        /* major revision of FOSSIL driver.    */
  110.     byte    minver;        /* minor revision of FOSSIL driver.    */
  111.     char far *ident;    /* FOSSIL identification string.    */
  112.     word    ibufr;        /* size of the input buffer.        */
  113.     word    ifree;        /* number of bytes left in buffer.    */
  114.     word    obufr;        /* size of the output buffer.        */
  115.     word    ofree;        /* number of bytes left in buffer.    */
  116.     byte    switdth;    /* width of screen on this adapter.    */
  117.     byte    sheigth;    /* height of screen "   "     "        */
  118.     byte    baud;        /* ACTUAL baud rate, computer to modem.    */
  119.     };
  120.  
  121. /*    The USER file.                            */
  122.  
  123. /*    User file structure.                        */
  124.  
  125. #define    MAXREAD        10    /* number of message areas to maintain.    */
  126.  
  127. #define    _no_ibm        0x0004    /* YABBS: can't handle IBM > 128.    */
  128. #define    _use_lore    0x0008    /* OPUS: uses line oriented editor.    */
  129. #define    _more        0x0010    /* wants the "More?" prompt.        */
  130. #define    _ansi        0x0020    /* OPUS: set wants Ansi.        */
  131. #define    _kludge        0x0040    /* OPUS: set used Opus before.        */
  132. #define    _formfeed    0x0080    /* OPUS: set xmit formfeeds.        */
  133.  
  134. struct    _usr
  135.     {
  136.     char    name[36];    /* caller's first and last names.    */
  137.     char    city[36];    /* caller's city and state.        */
  138.     int    lastmsg[20];    /* maximum areas now 20.        */
  139.     char    pwd[16];    /* caller's password.            */
  140.     int    times;        /* number of previous calls.        */
  141.     int    help;        /* caller's help level.            */
  142.     int    tabs;        /* 0 = transmit <sp> instead of tabs.    */
  143.     int    nulls;        /* number of nulls after <cr>        */
  144.     int    msg;        /* last message area visited.        */
  145.     word    flags;        /* user flags - see below.        */
  146.  
  147. /*    bit    filler     : 3;     OPUS: filler.                */
  148. /*    bit    use_lore : 1;     OPUS: uses line oriented editor.    */
  149. /*    bit    more     : 1;     wants the "More?" prompt.        */
  150. /*    bit    ansi     : 1;     OPUS: set wants Ansi.            */
  151. /*    bit    kludge     : 1;     OPUS: set used Opus before.        */
  152. /*    bit    formfeed : 1;     OPUS: set xmit formfeeds.        */
  153.  
  154.     int    priv;        /* access level.            */
  155.     char    ldate[20];    /* last date on system.            */
  156.     int    time;        /* time on-line so far today.        */
  157.     int    flag;        /* used to hold baud rate for outside.    */
  158.     int    upld;        /* total k-bytes uploaded.        */
  159.     int    dnld;        /* total k-bytes downloaded.        */
  160.     int    dnld1;        /* k-bytes downloaded today.        */
  161.     int    files;        /* last file area visited.        */
  162.     byte    width;        /* character width of caller's monitor.    */
  163.     byte    len;        /* line height of caller's monitor.    */
  164.     int    credit;        /* network credit.            */
  165.     int    debit;        /* network debit.            */
  166.     };
  167.  
  168. #define    MAXLREAD    10
  169.  
  170. struct    _old_usr
  171.     {
  172.     char    name[36];    /* caller's first and last names.    */
  173.     char    city[36];    /* caller's city and state.        */
  174.  
  175.     struct        /* Last message read for the prior 10 areas.    */
  176.     {
  177.     word    area;
  178.     word    msg;
  179.     }    lastmsg[MAXLREAD];
  180.  
  181.     char    pwd[16];    /* caller's password.            */
  182.     int    times;        /* number of previous calls.        */
  183.     int    help;        /* caller's help level.            */
  184.     int    tabs;        /* 0 = transmit <sp> instead of tabs.    */
  185.     int    nulls;        /* number of nulls after <cr>        */
  186.     int    msg;        /* last message area visited.        */
  187.  
  188.     word    flags;        /* user flags - see below.        */
  189.  
  190. /*    bit    filler     : 3;     OPUS: filler.                */
  191. /*    bit    use_lore : 1;     OPUS: uses line oriented editor.    */
  192. /*    bit    more     : 1;     wants the "More?" prompt.        */
  193. /*    bit    ansi     : 1;     OPUS: set wants Ansi.            */
  194. /*    bit    kludge     : 1;     OPUS: set used Opus before.        */
  195. /*    bit    formfeed : 1;     OPUS: set xmit formfeeds.        */
  196.  
  197.     int    priv;        /* access level.            */
  198.     char    ldate[20];    /* last date on system.            */
  199.     int    time;        /* time on-line so far today.        */
  200.     int    flag;        /* used to hold baud rate for outside.    */
  201.     int    upld;        /* total k-bytes uploaded.        */
  202.     int    dnld;        /* total k-bytes downloaded.        */
  203.     int    dnld1;        /* k-bytes downloaded today.        */
  204.     int    files;        /* last file area visited.        */
  205.     byte    width;        /* character width of caller's monitor.    */
  206.     byte    len;        /* line height of caller's monitor.    */
  207.     int    credit;        /* network credit.            */
  208.     int    debit;        /* network debit.            */
  209.     };
  210.  
  211. /*    System file definitions.                    */
  212.  
  213. struct    _sys
  214.     {
  215.     dword    callers;    /* Total # of callers in system.bbs.    */
  216.     byte    msgpriv;    /* YABBS: minimum privs for msg area.    */
  217.     byte    filepriv;    /* YABBS: minimum privs for file area.    */
  218.     char    msgpath[40];    /* path to messages.            */
  219.     char    bbspath[40];    /* path to bbs or barricade file.    */
  220.     char    hlppath[40];    /* path to help files.            */
  221.     char    uppath[40];    /* path to upload area.            */
  222.     char    filepath[40];    /* path to download area.        */
  223.     word    attrib;        /* message area attribute.        */
  224.     word    ms_caller;
  225.     long    quote_pos;    /* position of next usable quote file byte. */
  226.     char    msg_tag[9];    /* YABBS: message area tag.        */
  227.     char    file_tag[9];    /* YABBS: file area tag.        */
  228.     word    lastread;    /* YABBS: last message read by sysop.    */
  229.     byte    filler[22];    /* YABBS: filler out to 256 bytes.    */
  230.     };
  231.  
  232. /*    System file definitions.                    */
  233.  
  234. struct    _old_sys
  235.     {
  236.     word    callers;    /* Total # of callers in system.bbs.    */
  237.     word    priv;        /* minimum privs for this area.        */
  238.     char    msgpath[40];    /* path to messages.            */
  239.     char    bbspath[40];    /* path to bbs or barricade file.    */
  240.     char    hlppath[40];    /* path to help files.            */
  241.     char    uppath[40];    /* path to upload area.            */
  242.     char    filepath[40];    /* path to download area.        */
  243.     word    attrib;        /* message area attribute.        */
  244.     word    ms_caller;
  245.     long    quote_pos;    /* position of next usable quote file byte. */
  246.     };
  247.  
  248. /*    Messages.                            */
  249.  
  250. /*    Message attributes.                        */
  251. /*                        p = preserved across net*/
  252. /*                        n = not used by Opus.    */
  253. /*                        s = preserved by Seadog    */
  254.  
  255. #define    MSGPRIVATE    0X0001    /* private message.        p    */
  256. #define    MSGCRASH    0X0002    /* accept for forwarding.    p    */
  257. #define    MSGREAD        0X0004    /* read by addressee.        p    */
  258. #define    MSGSENT        0X0008    /* sent ok (remote).            */
  259. #define    MSGFILE        0X0010    /* file attached to message.    p    */
  260. #define    MSGFWD        0X0020    /* being forwarded.            */
  261. #define    MSGORPHAN    0X0040    /* unknown dest node.            */
  262. #define    MSGKILL        0X0080    /* kill after mailing.        p    */
  263. #define    MSGLOCAL    0X0100    /* FidoNet vs. local.            */
  264. #define    MSGHOLD        0X0200    /* Hold, don't send.        p    */
  265. #define    MSGXX2        0X0400    /* STRIPPED by FidoNet.         ns    */
  266. #define    MSGFRQ        0X0800    /* file request.        p    */
  267. #define    MSGRRQ        0X1000    /* receipt requested.        pn    */
  268. #define    MSGCPT        0X2000    /* is a return receipt.        pn    */
  269. #define    MSGARQ        0X4000    /* audit trail requested.    pn    */
  270. #define    MSGURQ        0X8000    /* update request.        pn    */
  271.  
  272.  
  273. /*    Message header.                            */
  274.  
  275. struct    _msg
  276.     {
  277.     char    from[36];    /* who the message is from.        */
  278.     char    to[36];        /* who the message is to.        */
  279.     char    subject[72];    /* the message's subject.        */
  280.     char    date[20];    /* date message entered.        */
  281.     word    times;        /* Fido: number of times read.        */
  282.     word    dest;        /* destination node.            */
  283.     word    orig;        /* originating node number.        */
  284.     word    cost;        /* unit cost charged to send message.    */
  285.     word    orig_net;    /* originating network number.        */
  286.     word    dest_net;    /* destination network number.        */
  287.     struct    _stamp    date_written;    /* Date message was written.    */
  288.     struct    _stamp    date_arrived;    /* Date message arrived on-line.*/
  289.     word    reply;        /* Current msg is a reply to this msg.    */
  290.     word    attr;        /* attribute (behavior) of the message.    */
  291.     word    up;        /* next message in the thread.        */
  292.     };
  293.  
  294. /*    Events.                                */
  295.  
  296. #define EXT_EVENT    'X'    /* External event (return to Dos)    */
  297. #define YELL_EVENT    'Y'    /* Yell event (when Yell is on)        */
  298. #define SCHEDS        35    /* Maximum number of events.        */
  299.  
  300. struct    _ftime
  301.     {
  302.     word    year;        /* Used                    */
  303.     word    month;        /* Used                    */
  304.     word    day;        /* Used                    */
  305.     word    daywk;        /* Fido: day of the week        */
  306.     word    hour;        /* 0..23                */
  307.     word    mins;        /* 0..59                */
  308.     word    sec;        /* Unused                */
  309.     };
  310.  
  311.  
  312. /*    Schedule file record                        */
  313.  
  314. struct    _sched
  315.     {
  316.     struct    _ftime _etime;    /* Starting time of the event.        */
  317.     word    len;        /* Duration of event in minutes.    */
  318.     int    enable;        /* 1==Enabled. Opus: -1 == deleted.    */
  319.     word    trigger;    /* Unknown/unused.            */
  320.     word    result;        /* X errorlevel; OPUS: Yell bell duration.*/
  321.     byte    tag;        /* Event type ('A'..'Z').        */
  322.     byte    junk_1;        /* OPUS: Added to make this word-aligned.*/
  323.     word    last_ran;    /* OPUS: day of the month last ran.    */
  324.     word    b,c;        /* OPUS: Reserved.            */
  325.     word    behavior;    /* OPUS: see below.            */
  326.     byte    event_mask;    /* OPUS: force this event.        */
  327.     byte    GMT;        /* OPUS: Set=GMT, Clear=local time.    */
  328.     };
  329.  
  330. #define    FORCE_EVENT    0x0001    /* Execute this always.            */
  331.  
  332. /*
  333.  
  334. Z EVENTS BEHAVIOR...
  335.  
  336. If RESULT==1, the `behavior' field contains a "matrix mask".
  337. If RESULT==2, it is an internal housekeeping event.
  338.  
  339. HOUSEKEEPING
  340. */
  341.  
  342. #define CLEAN_HOLD    0x0001    /* del HoldArea "$" files        */
  343. #define SCAN_ALL    0x0002    /* scan all echomail areas        */
  344.  
  345. /*    Mailer structures.                        */
  346.  
  347. /*    MAIL.SYS file structure                        */
  348.  
  349. struct    _mail
  350.     {
  351.     int    node;        /* Our node number            */
  352.     float    fudge;        /* Unknown/unused            */
  353.     int    rate;        /* Maximum baud rate            */
  354.     char    mailpath[80];    /* Path for incomming messages        */
  355.     char    filepath[80];    /* Path for incomming files        */
  356.     int    net;        /* Our network number            */
  357.     int    alt_node;    /* Alternate node number        */
  358.     int    alt_net;    /* Alternate net number            */
  359.     };
  360.  
  361. /*
  362.  
  363. NODELIST.SYS file record structure.
  364.  
  365.     NET > 0 and NODE > 0    Normal node 
  366.     NET > 0 and NODE <= 0   Host node
  367.  
  368.      Net host........node== 0
  369.      Regional host...node==-1
  370.      Country host....node==-2
  371.  
  372.     NET == -1      Nodelist.Sys revision
  373.     NET == -2      Nodelist statement
  374.  
  375. */
  376.  
  377. struct    _node
  378.     {
  379.     int    number;        /* node number                */
  380.     int    net;        /* net number                */
  381.     int    cost;        /* cost of a message to this node    */
  382.     int    rate;        /* baud rate                */
  383.     char    name[20];    /* node name                */
  384.     char    phone[40];    /* phone number                */
  385.     char    city[40];    /* city and state            */
  386.     };
  387.  
  388. /************************************************************************/
  389. /*                                    */
  390. /*    New Nodelist structure                        */
  391. /*                                    */
  392. /* This new nodelist structure was taken from Bob Hartman's Parselst    */
  393. /* source header file TYPES.H. It is included here in order to make    */
  394. /* YABBS software compatible with the Version 6 nodelist used by    */
  395. /* Opus 1.1 and BinkleyTerm.                        */
  396. /************************************************************************/
  397.  
  398. struct    _node6
  399.     {
  400.     int    net;        /* net number.                */
  401.     int    number;        /* node number.                */
  402.     int    cost;        /* cost per minute to call.        */
  403.     char    name[34];    /* node name.                */
  404.     char    phone[40];    /* phone number.            */
  405.     char    city[30];    /* city and state.            */
  406.     char    password[8];    /* warning, not necessarily null terminated */
  407.     int    realcost;    /* phone company's charge.        */
  408.     int    hubnode;    /* this node's hub number or 0 if none.    */
  409.     char    rate;        /* actual baud rate divided by 300.    */
  410.     char    modem;        /* modem type code (see below).        */
  411.     word    flags1;        /* set of flags (see below).        */
  412.     int    reserved;    /* reserved.                */
  413.     };
  414.  
  415. /*------------------------------------------------------------------------*/
  416. /* Values for the `flags1' field                                          */
  417. /*------------------------------------------------------------------------*/
  418.  
  419. #define    B_hub      0x0001  /* node is a net hub       0000 0000 0000 0001 */
  420. #define B_host     0x0002  /* node is a net host      0000 0000 0000 0010 */
  421. #define B_region   0x0004  /* node is region coord    0000 0000 0000 0100 */
  422. #define B_zone     0x0008  /* node is a zone coord    0000 0000 0000 1000 */
  423. #define B_CM       0x0010  /* runs continuous mail    0000 0000 0001 0000 */
  424. #define B_ores1    0x0020  /* reserved for Opus       0000 0000 0010 0000 */
  425. #define B_ores2    0x0040  /* reserved for Opus       0000 0000 0100 0000 */
  426. #define B_ores3    0x0080  /* reserved for Opus       0000 0000 1000 0000 */
  427. #define B_ores4    0x0100  /* reserved for Opus       0000 0001 0000 0000 */
  428. #define B_ores5    0x0200  /* reserved for Opus       0000 0010 0000 0000 */
  429. #define B_res1     0x0400  /* reserved for non-Opus   0000 0100 0000 0000 */
  430. #define B_res2     0x0800  /* reserved for non-Opus   0000 1000 0000 0000 */
  431. #define B_res3     0x1000  /* reserved for non-Opus   0001 0000 0000 0000 */
  432. #define B_res4     0x2000  /* reserved for non-Opus   0010 0000 0000 0000 */
  433. #define B_res5     0x4000  /* reserved for non-Opus   0100 0000 0000 0000 */
  434. #define B_res6     0x8000  /* reserved for non-Opus   1000 0000 0000 0000 */
  435.  
  436. /*------------------------------------------------------------------------*/
  437. /* Values for the `modem' field                                           */
  438. /*------------------------------------------------------------------------*/
  439.  
  440. #define M_HST      0x01    /* node uses an HST                  0000 0001 */
  441. #define M_PEP      0x02    /* node uses a PEP modem             0000 0001 */
  442.  
  443. /************************************************************************/
  444. /*                                    */
  445. /*    NODELIST.IDX record file structure.                */
  446. /*                                    */
  447. /************************************************************************/
  448.  
  449. struct    _ndi
  450.     {
  451.     int    node;        /* node number                */
  452.     int    net;        /* net number                */
  453.     };
  454.  
  455. /************************************************************************/
  456. /*                                    */
  457. /* QuickBBS 2.0 nodelist structure. This was taken from the file BINK.H    */
  458. /* from Binkley Term 1.5.                        */
  459. /*                                    */
  460. /************************************************************************/
  461.  
  462. /*--------------------------------------------------------------------------*/
  463. /* QuickBBS 2.00 QNL_IDX.BBS                                                */
  464. /* (File is terminated by EOF)                                              */
  465. /*--------------------------------------------------------------------------*/
  466.  
  467. struct    QuickNodeIdxRecord
  468.     {
  469.     int    QI_Zone;
  470.     int    QI_Net;
  471.     int    QI_Node;
  472.     byte    QI_NodeType;
  473.     };
  474.  
  475. /*--------------------------------------------------------------------------*/
  476. /* QuickBBS 2.00 QNL_DAT.BBS                                                */
  477. /* (File is terminated by EOF)                                              */
  478. /*--------------------------------------------------------------------------*/
  479.  
  480. struct    QuickNodeListRecord
  481.     {
  482.     byte    QL_NodeType;
  483.     int    QL_Zone;
  484.     int    QL_Net;
  485.     int    QL_Node;
  486.     byte    QL_Name[21];    /* Pascal! 1 byte count, up to 20 chars    */
  487.     byte    QL_City[41];    /* 1 + 40                */
  488.     byte    QL_Phone[41];    /* 1 + 40                */
  489.     byte    QL_Password[9];    /* 1 + 8                */
  490.     word    QL_Flags;    /* Same as flags in new nodelist structure */
  491.     int    QL_BaudRate;
  492.     int    QL_Cost;
  493.     };      
  494.  
  495.